package br.com.sgpv2.entity.faixacomparativo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;

import com.sun.istack.internal.NotNull;

/**
 * Representa uma entidade faixa de comparativo no sistema.
 */
@Entity
@Table(name = "fac_faixa_comparativo")
@SequenceGenerator(name = "sequenceFaixaComparativo", sequenceName = "fac_faixa_comparativo_fac_id_seq")
public class FaixaComparativo implements Serializable {

	private int id;
	private String descricao;
	private BigDecimal baseCalculo;
	private List<ItemFaixaComparativo> itensFaixaComparativo = new ArrayList<ItemFaixaComparativo>();

	/**
	 * Recupera o ID.
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "fac_id", nullable = false)
	public int getId() {
		return id;
	}

	/**
	 * Configura o ID.
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Recupera a descrição.
	 */
	@Column(name = "fac_descricao")
	@NotNull
	public String getDescricao() {
		return descricao;
	}

	/**
	 * Configura a descrição.
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	/**
	 * Recupera os itens da faixa de comparativo.
	 */
	@OneToMany(mappedBy = "faixaComparativo", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	@Cascade(value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
	public List<ItemFaixaComparativo> getItensFaixaComparativo() {
		return itensFaixaComparativo;
	}

	/**
	 * Configura a lista de itens da faixa de comparativo.
	 */
	public void setItensFaixaComparativo(
			List<ItemFaixaComparativo> itensFaixaComparativo) {
		if (this.itensFaixaComparativo != null) {
			this.itensFaixaComparativo.clear();
			this.itensFaixaComparativo.addAll(itensFaixaComparativo);
		} else {
			this.itensFaixaComparativo = itensFaixaComparativo;
		}
	}

	/**
	 * Recupera a base de calculo.
	 */
	@Column(name = "fac_base_calculo")
	@NotNull
	public BigDecimal getBaseCalculo() {
		
		if(baseCalculo!=null){
			baseCalculo.setScale(2, RoundingMode.HALF_UP);
		}
		return baseCalculo;
	}

	/**
	 * Configura a base de calculo.
	 */
	public void setBaseCalculo(BigDecimal baseCalculo) {
		this.baseCalculo = baseCalculo;
	}

}
